<?php

require_once './SessionController.php';
require_once '../../../../Utils/Conexion.php';

$torneo = FALSE;
if(isset($_SESSION['TORNEO'])) $torneo = $_SESSION['TORNEO'];

//RECIBIDOS
$accion = FALSE;
$valor = FALSE;
if (isset($_POST["accion"])) $accion = $_POST["accion"];
if (isset($_POST["valor"])) $valor = $_POST["valor"];

if(!$clientIP) {
    die("NO SE PUDO DETERMINAR EL IP DE LA TERMINAL");
}


//ACCIONES
if($accion) {
    if($accion === 'GET_TIME') {
        echo getTime();
    } else if ($accion === 'GET_TORNEO_DATA') {
        echo refreshTorneoData();
    } else if ($accion === 'GET_PREMIOS') {
        echo refreshPremios($valor);
    } else if ($accion === 'GET_POZO') {
        echo refreshPozo();
    } else if ($accion === 'GET_CIEGAS') {
        echo refreshCiegas();
    } else if ($accion === 'GET_TIEMPOS') {
        echo refreshTiempos();
    }
} else {
    die("NO SE PUDO DETERMINAL LA ACCION A REALIZAR");
} 


function getTime() {
    $respuesta = 0;
    $actualizar = FALSE;
    if($_SESSION['ESTADO'] === "RESTART") {
        getCiegas();
        resetNivel(time());
        $_SESSION['ESTADO'] = "PAUSE";
        $actualizar = "C";
    } 
    $respuesta =  run(time(), $actualizar);
    return $respuesta;
}


//MANEJA EL TIMER ESTE CORRIENDO O EN PAUSA
function run($ahora, $actualizar) {
    $total = $_SESSION['TIEMPO_TOTAL'];
    $actual = 0;
    $porc = 0;
    
    //BREAK - ACTUALIZACIONES
    $tipo = "N";
    if($_SESSION['BREAK']) $tipo = "B";
    if($actualizar) $tipo = $actualizar;
    
    //ESTADO
    $estado = "R";
    if($_SESSION['ESTADO'] === "FINALIZADO") $estado = "F";
    if($_SESSION['ESTADO'] === "PAUSE") $estado = "P";
    
    
    //SI LLEGO A CERO LLAMO AL SIGUIENTE NIVEL
    if(!$_SESSION['TIEMPO_ACTUAL']) {
        resetNivel($ahora);
    }
    
    if($_SESSION['ESTADO'] === "PLAY") {
        if($_SESSION['TIEMPO_ACTUAL'] <= 1) {
            siguienteNivel($ahora);
            $tipo = "C";
        } 
        
        //CALCULA EL TIEMPO
        $actual = $_SESSION['TIEMPO_ACTUAL'];
        $anterior = $_SESSION['TIEMPO_ANTERIOR'];
        $acumulado = $_SESSION['TIEMPO_ACUMULADO'] + ($ahora - $anterior);
        $actual = $total - $acumulado;
        
        //RECARGAR DATOS EN LA SESSION
        $_SESSION['TIEMPO_ACUMULADO'] = $acumulado;
        $_SESSION['TIEMPO_ACTUAL'] = $actual;
    }    
    
    
    $_SESSION['TIEMPO_ANTERIOR'] = $ahora;

    //CALCULA EL PORCENTAJE RESTANTE
    if($total > 0) {
        $porc = ceil($_SESSION['TIEMPO_ACTUAL']*100/$total);
    }
    
    return $_SESSION['TIEMPO_ACTUAL']."~".$porc."~$tipo~$estado";
}

function getTorneo() {
    global $clientIP;
    $query = "SELECT t.id, t.nombre, m.nombre AS moneda, m.nombre_corto AS moneda_corta, 
              t.pozo_acumulado, t.total_puntos, 
              IFNULL(t.nivel_actual, 0) AS nivel_actual, t.total_compitiendo, t.total_recompras, 
              t.total_addons, t.total_inscriptos, inscripciones_normales, inscripciones_combos, 
              IFNULL(ed.nivel, 0) AS nivel, t.poker_estructura_id, t.mostrar_pozo, t.mostrar_premios  
              FROM poker_torneos t 
              LEFT JOIN monedas AS m ON t.moneda_id = m.id 
              LEFT JOIN poker_estructura_detalles AS ed ON t.nivel_actual = ed.id 
              WHERE t.poker_clock = '$clientIP' AND t.finalizado IS FALSE 
              AND t.habilitar_juego IS TRUE LIMIT 1";
    $consulta = consultar($query);
    if($consulta) {
        setTorneo($consulta[0]);
    } else {
        setTorneo(FALSE);
    }
}

function setTorneo($t) {
    global $torneo;
    $torneo = $t;
    $_SESSION['TORNEO'] = $t;
}


//TORNEO
function refreshTorneoData(){
    global $torneo;
    getTorneo();
    if(!$torneo) {
        return "<script type='text/javascript'>location.reload();</script>";
    }
    
    //CALCULO DEL PUNTAJE PROMEDIO
    $puntosPromedio = 0;
    if($torneo['total_compitiendo'] > 0) {
        $puntosPromedio = $torneo['total_puntos'] / $torneo['total_compitiendo'];
    }
    
    $respuesta = $torneo['nombre']."~".
                 number_format($torneo['total_inscriptos'], 0, ",", ".")."~".
                 number_format($torneo['total_compitiendo'], 0, ",", ".")."~".
                 number_format($torneo['inscripciones_normales'], 0, ",", ".")."~".
                 number_format($torneo['inscripciones_combos'], 0, ",", ".")."~".
                 number_format($torneo['total_puntos'], 0, ",", ".")."~".
                 number_format($puntosPromedio, 0, ",", ".")."~".
                 number_format($torneo['total_recompras'], 0, ",", ".")."~".
                 number_format($torneo['total_addons'], 0, ",", ".");
    return $respuesta;
}



// ************************************ //
//          CIEGAS Y NIVELES            //
// ************************************ //


function resetNivel($ahora) {
    if(!$ahora) $ahora = time();
    if(is_array($_SESSION['CIEGAS'])) {
        $_SESSION['BREAK'] = FALSE;
        restart($ahora, $_SESSION['CIEGAS'][0]['duracion']*60);
    }
}


//CAMBIA AL SIGUIENTE NIVEL 
function siguienteNivel($ahora){
    global $torneo;
    $ciegas = $_SESSION['CIEGAS'];
    if(is_array($ciegas) && sizeof($ciegas) == 2) {
        if($ciegas[0]['break']>0 && !$_SESSION['BREAK']) {
            $_SESSION['BREAK'] = TRUE;
            $query = "INSERT INTO poker_movimientos (poker_torneo_id, poker_estructura_detalle_id, tipo, descripcion) 
                       VALUES (".$torneo['id'].", ".$ciegas[0]['id'].", 'BREAK', 'INICIO DEL DESCANSO - NIVEL NRO. ".$ciegas[0]['nivel']."');";
            ejecutar($query);
            restart($ahora, $ciegas[0]['break']*60);
        } else {
            $_SESSION['BREAK'] = FALSE;
            $query = "UPDATE poker_torneos SET nivel_actual = ".$ciegas[1]['nivel']." 
                      WHERE id = ".$torneo['id']." LIMIT 1;";
            
            $query .= "INSERT INTO poker_movimientos (poker_torneo_id, poker_estructura_detalle_id, tipo, descripcion) 
                       VALUES (".$torneo['id'].", ".$ciegas[1]['id'].", 'NUEVO NIVEL', 'INICIO NIVEL NRO. ".$ciegas[1]['nivel']."');";
            multiQuery($query);
            
            restart($ahora, $ciegas[1]['duracion']*60);
            getCiegas();
        }
    } else {
        $_SESSION['ESTADO'] = "FINALIZADO";
    }
}

//REINICIA EL TIMER
function restart($ahora, $total) {
    if(!$total) $total = $_SESSION['TIEMPO_TOTAL'];
    else $_SESSION['TIEMPO_TOTAL'] = $total;
    $_SESSION['TIEMPO_ANTERIOR'] = $ahora;
    $_SESSION['TIEMPO_ACUMULADO'] = 0;
    $_SESSION['TIEMPO_ACTUAL'] = $_SESSION['TIEMPO_TOTAL'];
}


//OBTIENE LAS CIEGAS ACTUALES
function getCiegas() {
    global $torneo;
    getTorneo();
    $respuesta = FALSE;
    $query = "SELECT id, nivel, ante, small_blind, big_blind, duracion, break FROM poker_estructura_detalles 
              WHERE poker_estructura_id = ".$torneo['poker_estructura_id']." 
              AND nivel >= ".$torneo['nivel_actual']." ORDER BY nivel ASC LIMIT 2";
    $consulta = consultar($query);
    if($consulta) {
        $_SESSION['CIEGAS'] = $consulta;
        $respuesta = $consulta;
    }
    return $respuesta;
}


//REFRESH DE CIEGAS PARA LA INTERFACE
function refreshCiegas() {
    $r = getCiegas();
    $respuesta = "";
    if($r) {
        $siguiente = "~ULTIMO NIVEL~---";
        if(sizeof($r)==2) {
            $siguiente = "~SIG: ".number_format($r[1]['small_blind'], 0, ",",".")." / ".number_format($r[1]['big_blind'], 0, ",",".").
                          "~SIG: ".number_format($r[1]['ante'], 0, ",",".");
        }
        $respuesta = $r[0]['nivel']."~".
                     number_format($r[0]['small_blind'], 0, ",",".")."~".
                     number_format($r[0]['big_blind'], 0, ",",".")."~".
                     number_format($r[0]['ante'], 0, ",",".").$siguiente;
    }
    return $respuesta;
}

// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------



//POZO
function refreshPozo() {
    global $torneo;
    $respuesta = "";
    if($torneo['mostrar_pozo']) {
        $respuesta = "<div class='well bs '>
                        <div class='text-center subTitulos'>POZO</div>
                        <div class='valorGrande' id='pozoAcumulado'>".number_format($torneo['pozo_acumulado'], 0, ",", ".")."</div>
                        <div class='moneda' id='moneda'>".$torneo['moneda']."</div>
                      </div>";
    }
    return $respuesta;
}


//PREMIOS
function refreshPremios($pag) {
    global $torneo;
    $respuesta = "";
    $total = 0;
    
    
    if($torneo['mostrar_premios']) {
        //PAGINADOR
        $cantPorPagina = 5;
        $inicial = $pag * $cantPorPagina;
        
        //TOTAL PAGINAS
        $query = "SELECT COUNT(id) AS count FROM poker_pay_out 
                  WHERE poker_torneo_id = ".$torneo['id'];
        $cant = consultar($query);
        if($cant) {
            $total = ceil($cant[0]['count']/$cantPorPagina)-1;
        }
        
        //CONSULTA
        $query = "SELECT puesto, monto FROM poker_pay_out 
                  WHERE poker_torneo_id = ".$torneo['id']." 
                  ORDER BY puesto ASC LIMIT $inicial, $cantPorPagina";
        $consulta = consultar($query);
        if($consulta) {
            $respuesta = "<div class='well bs ' style='height: 265px;'>
                            <div class='text-center subTitulos'>PREMIOS</div>
                                <table style='background: none;' width='100%'>";

            foreach ($consulta as $premio) {
                $mostrar = "<span class='h4'>".$torneo['moneda_corta']." &nbsp;</span>".number_format($premio['monto'], 0, ",",".");
                $respuesta .= "<tr>
                                <td class='premios'>".$premio['puesto']."&deg;</td>
                                <td class='premios text-right' id='puntosTotal'> $mostrar </td>
                               </tr>";
            }
            $respuesta .= "</table></div></div>";
        } 
    }
    return $respuesta."~".$total;
}


// DEVUELVE EL TIEMPO TRANSCURRIDO Y EL TIEMPO FALTANTE PARA EL SIGUIENTE BREAK
function refreshTiempos() {
    global $torneo;
    $respuesta = "0~0";
    
    $query = "SELECT ("
                . "SELECT SUM(duracion) FROM poker_estructura_detalles "
                . "WHERE poker_estructura_id = ".$torneo['poker_estructura_id']." "
                . "AND nivel < ".$torneo['nivel_actual']." "
            . ") AS elapsed, ("
                . "SELECT IFNULL(SUM(duracion),0)  FROM poker_estructura_detalles "
                . "WHERE poker_estructura_id = ".$torneo['poker_estructura_id']." "
                . "AND nivel > ".$torneo['nivel_actual']." "
                . "AND nivel <= ("
                    . "SELECT nivel FROM poker_estructura_detalles "
                    . "WHERE poker_estructura_id = ".$torneo['poker_estructura_id']." "
                    . "AND nivel >= ".$torneo['nivel_actual']." "
                    . "AND break > 0 LIMIT 1"
                . ")"
            . ") AS nextBreak";
    
    $consulta = consultar($query);
    if($consulta) {
        
        //TIME ELAPSED
        $transcurrido = $consulta[0]['elapsed']*60 + $_SESSION['TIEMPO_ACUMULADO'];
        
        //NEXT BREAK
        $actual = $_SESSION['TIEMPO_TOTAL'] - $_SESSION['TIEMPO_ACUMULADO'];
        if($consulta[0]['nextBreak']>0) {
            $descanso = $consulta[0]['nextBreak']*60 + $actual;
        } else {
            if($_SESSION['CIEGAS'][0]['break']>0){
                $descanso = $actual;
            } else {
                $descanso = -1;
            }
        }
        $respuesta = $transcurrido."~".$descanso;
    }
    //$respuesta .= "~NIVEL: ".$torneo['nivel_actual']." - SQL: ".$consulta[0]['nextBreak']." - ACTUAL: ".($actual/60)." - SALIDA: ".round($descanso/60,2);
    return $respuesta;
}
